/**
 * 路由历史管理器
 * 维护一个有序的路由访问列表，确保每个路由只记录第一次访问的信息
 */
export class RouteHistoryManager {
  constructor() {
    // 存储路由历史的数组
    this.history = [];
  }

  /**
   * 添加路由到历史记录
   * @param {Object} route - Vue Router 路由对象
   * @returns {Array} 更新后的路由历史列表
   */
  addRoute(route) {
    // 提取路由的唯一标识（可根据需求调整，这里使用 path + name）
    const routeKey = this.getRouteKey(route);
    
    // 检查是否已存在该路由
    const exists = this.history.some(item => item.key === routeKey);
    
    // 如果不存在，则添加到历史记录
    if (!exists) {
      this.history.push({
        key: routeKey,
        fullPath:route.fullPath,
        hash:route.hash,
        matched:route.matched,
        path: route.path,
        title:route.meta.title,
        name: route.name,
        query: route.query,
        params: route.params,
        meta: route.meta,
        timestamp: new Date().getTime()
      });
    }
    
    return this.history;
  }

  /**
   * 生成路由的唯一标识
   * @param {Object} route - Vue Router 路由对象
   * @returns {string} 路由的唯一标识
   */
  getRouteKey(route) {
    // 使用 path 和 name 组合作为唯一标识，可根据需求调整
    return `${route.path}__${route.name}`;
  }

  /**
   * 获取当前路由历史列表
   * @returns {Array} 路由历史列表
   */
  getHistory() {
    return this.history;
  }

  /**
   * 重置路由历史
   */
  reset() {
    this.history = [];
  }
}

// 创建单例实例
export const routeHistoryManager = new RouteHistoryManager();

// 导出便捷方法
export function useRouteHistory() {
  return {
    addRoute: routeHistoryManager.addRoute.bind(routeHistoryManager),
    getHistory: routeHistoryManager.getHistory.bind(routeHistoryManager),
    reset: routeHistoryManager.reset.bind(routeHistoryManager)
  };
}